package com.mapperdb.helper;

import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 注解辅助类
 * @author Administrator
 *
 */
public class Annt {

	Annotation annotation;
	Class<? extends Annotation> annotationClass;

	public static Annt use(Method method, Class<? extends Annotation> annotationClass) {
		if (method == null || annotationClass == null) return null;
		return new Annt(method, annotationClass);
	}

	public static Annt use(Annotation annotation) {
		if (annotation == null) return null;
		return new Annt(annotation);
	}

	public Annt(Method method, Class<? extends Annotation> annotationClass) {
		this.annotationClass = annotationClass;
		this.annotation = method.getAnnotation(annotationClass);
	}

	public Annt(Annotation annotation) {
		this.annotation = annotation;
		this.annotationClass = annotation.getClass();
	}

	@SuppressWarnings("unchecked")
	public <T> T get(String name) {
		try {
			return (T) annotationClass.getMethod(name).invoke(annotation);
		} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
				| SecurityException e) {
			throw new RuntimeException(e);
		}
	}

	public <T> T get(String name, Class<T> returnClassType) {
		return get(name);
	}
}
